Certain types of software errors are fatal to program execution. For example, a reference to a memory address that is beyond the address domain of a program will likely result in a fatal error. Certain timing or other transient conditions may also trigger fatal errors. While certain errors may be within the control of the software developer, the developer may be unable to guard against certain other errors in developing the software.
Program errors that are transient or timing-related are problematic to both the program user and to the program developer. From the user's point of view, failure of the program not only interrupts the task at hand, but may also result in lost work product. Reporting such transient errors is also difficult since the conditions required to reproduce the problem are likely to be unknown.
From the developer's point of view, much time may be spent trying to find the root cause of a problem where the root cause is external to the program. Furthermore, tracing the root cause of the problem may be difficult and time-consuming if there is there is scant information available for reproducing the problem.
A method and apparatus that address the aforementioned problems, as well as other related problems, are therefore desirable.